数学 : 範囲変換
■ 数式
数値xを 範囲 $ [a, b] から範囲$ [c, d] へ変換するような数式は以下のようになる
$ \frac{x-a}{ b - a} (d - c) + c
以下のようにも書ける。
$ \frac{x-a}{ a - b} (c - d) + c
■ 例 : 範囲0.2 ~ 0.7 を 範囲0.0 ~ 1.0に変換
数直線で表すと以下のようになる
$ 0.2 \leqq x \leqq 0.7
https://gyazo.com/890cbd0c6550d7b5df5782258a8d2f3e
不等式から0.2を引いて、
$ 0.0 \leqq x-0.2 \leqq 0.5
https://gyazo.com/c396103e6f023a7111c342fac25ecc97
不等式を0.5( = 0.7 - 0.2)で割って
$ 0.0 \leqq \frac{x-0.2}{0.7 - 0.2} \leqq 1.0
https://gyazo.com/e521592c264b72584a94e0d9082da37a
$ x_{min} 以上$ x_{max} 以下に含まれている $ x を $ 0 以上$ 1 以下の範囲に変換したい場合、以下を計算すると良い
$ \frac{x-x_{min}}{ x_{max} - x_{min}}
■実装(GLSL)
code:glsl
// 数値xを範囲(a,b)から範囲(c,d)へ変換
float remap(float x, float a, float b, float c, float d)
{
return (x - a) * (c - d) / (a - b) + c;
}